package com.ideaaedi.zoo.example.springboot.flowable.sharding.service;

import com.ideaaedi.zoo.diy.artifact.flowable.facade.DefaultBpmnAttachment;
import com.ideaaedi.zoo.diy.artifact.flowable.facade.DefaultBpmnComment;
import com.ideaaedi.zoo.diy.artifact.flowable.facade.DefaultBpmnHisProcessInstance;
import com.ideaaedi.zoo.diy.artifact.flowable.facade.DefaultBpmnHisTask;
import com.ideaaedi.zoo.example.springboot.flowable.sharding.entity.dto.*;
import org.apache.ibatis.annotations.Param;

import javax.annotation.Nonnull;
import java.util.List;

/**
 * (non-javadoc)
 *
 * @author <font size = "20" color = "#3CAA3C"><a href="https://gitee.com/JustryDeng">JustryDeng</a></font> <img
 * src="https://gitee.com/JustryDeng/shared-files/raw/master/JustryDeng/avatar.jpg" />
 * @since 1.0.0
 */
public interface ShardingBpmnHistoryService {
    
    /**
     * 流程实例详情（历史的、当前的都能查）
     * <p>
     * 注：尚未完成的流程实例和完成了的流程实例，都存储在ACT_HI_PROCINST表（他们通过END_TIME_是否为空来区分）
     * </p>
     *
     * @param param 查询参数
     *
     * @return 历史流程实例
     */
    DefaultBpmnHisProcessInstance detailHisProcessInstance(@Nonnull ShardingProcessDetailQueryDTO param);
    
    
    /**
     * 流程实例列表（历史的、当前的都能查）
     * <p>
     * 注：尚未完成的流程实例和完成了的流程实例，都存储在ACT_HI_PROCINST表（他们通过END_TIME_是否为空来区分）
     * </p>
     *
     * @param param 查询参数
     *
     * @return 历史流程实例
     */
    List<DefaultBpmnHisProcessInstance> listHisProcessInstance(@Nonnull ShardingProcessListQueryDTO param);
    
    /**
     * 查询任务列表
     *
     * @param param 参数
     *
     * @return  任务列表
     */
    List<DefaultBpmnHisTask> listHisTask(@Param("param") ShardingTaskListQueryDTO param);
    
    /**
     * 查询任务详情
     *
     * @param param 参数
     *
     * @return  任务详情
     */
    DefaultBpmnHisTask detailHisTask(@Param("param") ShardingTaskDetailQueryDTO param);
    
    /**
     * 查询流程实例的评论
     *
     * @param param 参数
     *
     * @return  流程实例的评论
     */
    List<DefaultBpmnComment> getProcessInstanceComments(@Param("param") ShardingCommentListQueryDTO param);
    
    /**
     * 查询流程实例的附件
     *
     * @param param 参数
     *
     * @return  流程实例的附件
     */
    List<DefaultBpmnAttachment> getProcessInstanceAttachments(@Param("param") ShardingAttachmentListQueryDTO param);
}
